#include<bits/stdc++.h>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType; 
typedef struct LNode{
	ElemType data;
	struct LNode *next;	
}LNode, *LinkList;

Status Init(LinkList &L)
{
	L = new LNode;
	if(!L) return ERROR;
	L->next = NULL;
	return OK;
}
Status Create(LinkList &L, int n)
{
	LNode *t = L;
	for(int i = 0; i < n; i ++)
	{
		LNode *p = new LNode;
		if(!p) return ERROR;
		cin >> p->data;
		t->next = p;
		t = p;
	}
	t->next = NULL;
	return OK;
}
void func(LinkList L, int n)
{
	/**********Begin**************/
    if (n <= 0 || L->next == NULL) return; // 处理边界情况
    
    // 使用动态数组记录绝对值出现情况（题目保证|data| <= n）
    bool *hash = new bool[n + 1](); // 初始化为false
    
    LNode *pre = L;    // 前驱指针
    LNode *curr = L->next; // 当前指针
    
    while (curr != NULL) {
        int abs_val = abs(curr->data);
        if (!hash[abs_val]) { // 首次出现
            hash[abs_val] = true;
            pre = curr;      // 保留节点，更新前驱
            curr = curr->next;
        } else {             // 重复出现
            pre->next = curr->next; // 删除当前节点
            delete curr;
            curr = pre->next;
        }
    }
    delete[] hash; // 释放动态数组
    /**********End**************/
}
void Show(LinkList L)
{
	LNode *p = L->next;
	while(p)
	{
		cout << p->data << ' ';
		p = p->next;
	}
	cout << endl;
}
int main()
{
	LinkList L;
	Init(L);
	
	int n;
	cin >> n;
	
	Create(L, n);
	func(L, n);
	Show(L);
	 
	return 0;
}